package 正则表达式.正则表达式案例;

public class regex2 {
    public static void main(String[] args) {
        //1. 用户名要求 大小写字母 数字 下划线 一共4-16位
        String regex1 = "\\w{4,16}";
        System.out.println("zhangsan".matches(regex1));

        //2. 身份证号码简单校验
        // 18位 第一位不能是0 2-16位任意数字 最后一位可以是数字 也可以是大小写的X
        String regex2="[1-9]\\d{16}(\\d|X|x)";
        String regex3="[1-9]\\d{16}[\\dXx]";
        String regex5="[1-9]\\d{16}(\\d|(?i)x)";
        System.out.println("130505200210192411".matches(regex5));

        // 忽略大小写的书写方式
        String regex4="(?i)abc";
        System.out.println("Abc".matches(regex4));

        // 3. 省份证号码的严格校验
        //身份证号码的严格校验
        //410801 1993 02 28 457x

        //前面6位:省份，市区，派出所等信息 第一位不能是0，后面5位是任意数字    [1-9]\\d{5}
        //年的前半段:18 19 20                                        (18|19|20)
        //年的后半段:任意数字出现两次                                    \\d{2}
        //月份:01~09 10 11 12                                       (0[1-9]|1[012])
        //日期:01 ~ 31                                              (0[1-9]|[12][0-9]|3[01])
        //后面四位:任意数字出现3次 最后一位可以是数字也可以是大写x或者小写x    [\\d{3}Xx]

        String regex6="[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\\d{3}[\\dXx]";
        System.out.println("130505200210192411".matches(regex6));

        // 插件身份证号的严格校验
        String regex7="[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\\d|30|31)\\d{3}[\\dXx]";

    }
}